//
//  Author:
//    Blake scifiboi@yahoo.com
//
//  Copyright (c) 2013, Daniel Blake Cogburn
//
//  All rights reserved.
//
//  Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
//
//     * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in
//       the documentation and/or other materials provided with the distribution.
//     * Neither the name of the [ORGANIZATION] nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
//
//  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
//  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
//  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
//  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
//  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
//  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
//  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
//  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
//  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
//  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
//  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
using System;
using ESCA;

namespace OutputWinder
{
	class MainClass
	{
		public static CPU MainCPU = new CPU ((1024 * 1024) * 256, 80, 25, 800, 600);
		public static void Main (string[] args)
		{
			BeforeRun (args);
			while (true)
				Run (args);
		}
		protected static void BeforeRun(string[] args)
		{
			Console.WriteLine ("This machine has " + MainCPU.MemMan.RAM.Length + " bytes of RAM,");
			Console.WriteLine ("                 " + MainCPU.MemMan.ConsoleVidMem.Length + " bytes of console video memory,");
			Console.WriteLine ("             and " + MainCPU.MemMan.GraphicsVidMem.Length + " bytes of VGA memory.");
			Console.WriteLine ();
			Console.WriteLine ("Register A (8-bit) currently holds a value of " + MainCPU.RegA.GetValue ());
			Console.WriteLine ("Register B (8-bit) currently holds a value of " + MainCPU.RegB.GetValue ());
			Console.WriteLine ("Register C (8-bit) currently holds a value of " + MainCPU.RegC.GetValue ());
			Console.WriteLine ("Register D (8-bit) currently holds a value of " + MainCPU.RegD.GetValue ());
			Console.WriteLine ("Register W (16-bit) currently holds a value of " + MainCPU.RegW.GetValue ());
			Console.WriteLine ("Register X (16-bit) currently holds a value of " + MainCPU.RegX.GetValue ());
			Console.WriteLine ("Register Y (16-bit) currently holds a value of " + MainCPU.RegY.GetValue ());
			Console.WriteLine ("Register Z (16-bit) currently holds a value of " + MainCPU.RegZ.GetValue ());
			
			
		}
		protected static void Run(string[] args)
		{
			Console.WriteLine ();
			Console.WriteLine ();
			Console.WriteLine ("Input some text to echo:");
			Console.Write ("> ");
			string input = Console.ReadLine ();
			Console.WriteLine (input);
		}
	}
}
